#!/usr/bin/env bash
echo -e "\033[34m ###################################################\033[0m"
echo -e "\033[34m ##   author：侯勇                                ##\033[0m"
echo -e "\033[34m ##   mail：yhouwork@163.com                      ##\033[0m"
echo -e "\033[34m ##   Linux version：  Cent OS7                   ##\033[0m"
echo -e "\033[34m ##   mysql version ： 5.7.25                     ##\033[0m"
echo -e "\033[34m ##   date ：2019/4/14                            ##\033[0m"
echo -e "\033[34m ##   ps ：数据库的初始化密码是随机密码请及时修改 ##\033[0m"
echo -e "\033[34m ###################################################\033[0m"
cd /;
#判断目录是否存在
if [ ! -d   "/usr/local"  ];
 then
  mkdir -p /usr/local
 fi
cd /usr/local;
echo -e "\033[34m =================》文件夹end《=================  \033[0m"
#下载安装包
if [ ! -e "/app/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz" ]; 
 then
    #wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz;
    if [ ! -d   "/app"  ];
        then
        mkdir /app
    fi
    cd /app;
    echo -e "\033[34m 下载安装包  \033[0m"
    wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz;
    cd -;
 fi
cp /app/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz  .
#解压安装包
echo -e "\033[34m =================》解压文件  start《=================  \033[0m"
tar -zxvf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz;
rm -f mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz;
echo -e "\033[34m =================》解压完成  end 《=================  \033[0m"
#重命名
mv mysql-5.7.25-linux-glibc2.12-x86_64 mysql
mkdir mysql/data
#添加用户组
groupadd mysql
#添加用户mysql 到用户组mysql
useradd -g mysql mysql
chown -R mysql:mysql mysql/
chmod -R 755 mysql/

#错误日志位置
mkdir /var/log/mysql
echo  > /var/log/mysql/mysql-error.log
echo  > /var/log/mysql/mysql.log
chown -R mysql:mysql /var/log/mysql

#修改my.cnf

#替换datadir
mycnfdir=/etc/my.cnf
#声明行
num=0;
numa=0;
nullnum=;
num=$(grep -n '\[mysqld\]'  $mycnfdir| awk -F ':' '{print $1}')
# 判断mysql配置是否存在
if  [  "$num" = ""   ] ;then
    echo -e "\033[34m =================》判断mysql配置存在  $num《=================  \033[0m"
    sed -i '1a \[mysqld\]' $mycnfdir
fi
#获取datadir所在行 
num=$(grep -n 'datadir\=.*'  $mycnfdir| awk -F ':' '{print $1}')

if  [  !  "$num" = ""    ] ;then
    echo -e "\033[34m =================》datadir此变量是存在的 进行修改  $num《=================  \033[0m"
    #此变量是存在的 进行修改
    sed -i 's/datadir\=.*/datadir\=\/usr\/local\/mysql\/data/g' $mycnfdir
else
    #此变量不存在 
    #获取需要插入的位置
    echo -e "\033[34m =================》datadir此变量不存在  进行插入  $num《=================  \033[0m"
    num=$(grep -n '\[mysqld\]'  $mycnfdir| awk -F ':' '{print $1}')
    echo -e "\033[34m =================》datadir此变量不存在  进行插入  $num《=================  \033[0m"
    numa=$num"a"
    echo -e "\033[34m =================》datadir此变量不存在  进行插入  $numa=================  \033[0m"
    sed -i $numa' datadir\=\/usr\/local\/mysql\/data' $mycnfdir ;
    num=$nullnum;
fi 

#获取basedir所在行 
num=$(grep -n 'basedir\=.*'  $mycnfdir| awk -F ':' '{print $1}')

if  [  !  "$num" = ""    ] ;then
    echo -e "\033[34m =================》basedir此变量是存在的 进行修改  $num《=================  \033[0m"
    #此变量是存在的 进行修改
    sed -i 's/basedir\=.*/basedir\=\/usr\/local\/mysql/g' $mycnfdir
else
    #此变量不存在 
    #获取需要插入的位置
    echo -e "\033[34m =================》basedir此变量不存在  进行插入  $num《=================  \033[0m"
    num=$(grep -n '\[mysqld\]'  $mycnfdir| awk -F ':' '{print $1}')
    echo -e "\033[34m =================》basedir此变量不存在  进行插入  $num《=================  \033[0m"
    numa=$num"a"
    echo -e "\033[34m =================》basedir此变量不存在  进行插入  $numa=================  \033[0m"
    sed -i $numa' basedir\=\/usr\/local\/mysql' $mycnfdir ;
    num=$nullnum;
fi 

#获取server\-id所在行 
num=$(grep -n 'server\-id\=.*'  $mycnfdir| awk -F ':' '{print $1}')

if  [  !  "$num" = ""    ] ;then
    echo -e "\033[34m =================》server-id此变量是存在的 进行修改  $num《=================  \033[0m"
    #此变量是存在的 进行修改
    sed -i 's/server\-id\=.*/server\-id\=1/g' $mycnfdir
else
    #此变量不存在 
    #获取需要插入的位置
    echo -e "\033[34m =================》server-id此变量不存在  进行插入  $num《=================  \033[0m"
    num=$(grep -n '\[mysqld\]'  $mycnfdir| awk -F ':' '{print $1}')
    echo -e "\033[34m =================》server-id此变量不存在  进行插入  $num《=================  \033[0m"
    numa=$num"a"
    echo -e "\033[34m =================》server-id此变量不存在  进行插入  $numa=================  \033[0m"
    sed -i $numa' server\-id\=1' $mycnfdir ;
    num=$nullnum;
fi 


#获取log-bin所在行 
num=$(grep -n 'log\-bin\=.*'  $mycnfdir| awk -F ':' '{print $1}')

#获取log-bin所在行 
if  [  !  "$num" = ""    ] ;then
    echo -e "\033[34m =================》log-bin此变量是存在的 进行修改  $num《=================  \033[0m"
    #此变量是存在的 进行修改
    sed -i 's/log\-bin\=.*/log\-bin\=\/var\/log\/mysql\/mysql\.log/g' $mycnfdir
else
    #此变量不存在 
    #获取需要插入的位置
    echo -e "\033[34m =================》log-bin此变量不存在  进行插入  $num《=================  \033[0m"
    num=$(grep -n '\[mysqld\]'  $mycnfdir| awk -F ':' '{print $1}')
    echo -e "\033[34m =================》log-bin此变量不存在  进行插入  $num《=================  \033[0m"
    numa=$num"a"
    echo -e "\033[34m =================》log-bin此变量不存在  进行插入  $numa=================  \033[0m"
    sed -i $numa' log\-bin\=\/var\/log\/mysql\/mysql\.log' $mycnfdir ;
    num=$nullnum;
fi

#获取log-error所在行 
num=$(grep -n 'log\-error\=.*'  $mycnfdir| awk -F ':' '{print $1}')

#获取log-error所在行 
if  [  !  "$num" = ""    ] ;then
    echo -e "\033[34m =================》log-error此变量是存在的 进行修改  $num《=================  \033[0m"
    #此变量是存在的 进行修改
    sed -i 's/log\-error\=.*/log\-error\=\/var\/log\/mysql\/mysql\-error\.log/g' $mycnfdir
else
    #此变量不存在 
    #获取需要插入的位置
    echo -e "\033[34m =================》log-error此变量不存在  进行插入  $num《=================  \033[0m"
    num=$(grep -n '\[mysqld\_safe\]'  $mycnfdir| awk -F ':' '{print $1}')
    echo -e "\033[34m =================》log-error此变量不存在  进行插入  $num《=================  \033[0m"
    numa=$num"a"
    echo -e "\033[34m =================》log-error此变量不存在  进行插入  $numa=================  \033[0m"
    sed -i $numa' log\-error\=\/var\/log\/mysql\/mysql\-error\.log' $mycnfdir ;
    num=$nullnum;
fi

#获取socket所在行 
num=$(grep -n 'socket\=.*'  $mycnfdir| awk -F ':' '{print $1}')

#获取socket所在行 
if  [  !  "$num" = ""    ] ;then
    echo -e "\033[34m =================》socket此变量是存在的 进行修改  $num《=================  \033[0m"
    #此变量是存在的 进行修改
    sed -i 's/socket\=.*/socket\=\/tmp\/mysql\.sock/g' $mycnfdir
else
    #此变量不存在 
    #获取需要插入的位置
    echo -e "\033[34m =================》socket此变量不存在  进行插入  $num《=================  \033[0m"
    num=$(grep -n '\[mysqld\]'  $mycnfdir| awk -F ':' '{print $1}')
    echo -e "\033[34m =================》socket此变量不存在  进行插入  $num《=================  \033[0m"
    numa=$num"a"
    echo -e "\033[34m =================》socket此变量不存在  进行插入  $numa=================  \033[0m"
    sed -i $numa' socket\=\/tmp\/mysql\.sock' $mycnfdir ;
    num=$nullnum;
fi



cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

#环境变量配置
echo  "export PATH=\$PATH:/usr/local/mysql/bin" >> /etc/profile

source /etc/profile

./mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/   --initialize  2>&1 | tee mylog.log

password=$(cat  mylog.log | grep "root@localhost:")

rm -f mylog.log

echo -e "\033[47;37m                                          \033[0m"
echo -e "\033[47;37m           \033[1;47;31m 密码：${password#*: }            \033[47;37m"   
echo -e "\033[47;37m                                          \033[0m"


echo -e "\033[34m =================》数据库安装end 《=================  \033[0m"

echo -e " 是否立即启动（yes/no)： "

echo "service mysqld start" >> /etc/rc.local

read input

if  [  "$input"x   =   "yes"x  ]  ; then
   service mysqld start;
   echo -e " 数据库启动完成 "
   echo -e " 请设置root账户密码： "
   read newpassword
   mysql -hlocalhost -P3306  -u root -p${password}  -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '"${newpassword}"';"
   else
   echo -e " 数据库启动命令 ： service mysqld start; "
   echo -e " 进入数据库后执行命令 :  ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'   进行修改密码"
fi



